一、什么是代理模式

  • 定义
    给目标对象提供一个代理对象,由代理对象操作目标对象的引用。
  • 目的
    通过操作代理对象,操作目标对象,降低程序的复杂性,可以使用代理类实现目标对象的增强。不改变目标对象实现功能则增加。代理模式的结构图

image.png

1
2
3
4
graph LR;
bwmcar-->car
bwmcar-->bwmproxy
bwmproxy-->car

二、java实现

1
2
3
4
5
//定义一个接口
public interface Car {
public void run() ;

}
1
2
3
4
5
6
//定义宝马车实现类
public class BmwCar implements Car {
public void run() {
System.out.println("我是一个宝马车");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//定义宝马车实现类
public class BmwCarProxy implements Car {
//代理类拥有目标对象的引用
private BmwCar bmwCar;

public void proxy(BmwCar bmwCar) {
this.bmwCar = bmwCar;
}

public void run() {
System.out.println("增强前");
bmwCar.run();
System.out.println("增强后");
}
}
1
2
3
4
5
6
7
public static void main(String[] args) {
BmwCar bmwCar =new BmwCar();
BmwCarProxy proxy =new BmwCarProxy();
proxy.proxy(bmwCar);
//调用代理类的方法
proxy.run();
}

image.png

三、总结

  1. 静态代理模式可以在不改变目标对象的前提下,对目标对象实现方法的增加
  2. 每次增加增强方法都需要修改代码,违反开闭原则,扩展能力可维护性查